Telegram Group & Telegram Channel
πŸ‘£ Π—Π°Π΄Π°Ρ‡Π° с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связан с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ повСдСния Ρ†ΠΈΠΊΠ»ΠΎΠ², Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² Go 1.22 (ΠΈ, соотвСтствСнно, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ для Go 1.24).

Π—Π°Π΄Π°Ρ‡Π°: Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ компиляции ΠΈ запускС с использованиСм Go 1.24?


package main

import (
"fmt"
"sync"
"time"
)

func main() {
var wg sync.WaitGroup
count := 3

fmt.Println("Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Add(count)

for i := 0; i < count; i++ {
// ЗапускаСм Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
go func() {
defer wg.Done()
// Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ
time.Sleep(time.Duration(10) * time.Millisecond)
// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π° 'i' Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹
fmt.Printf("Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = %d\n", i)
}()
}

fmt.Println("ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Wait()
fmt.Println("ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.")
}



Π Π°Π·Π±ΠΎΡ€:
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (Π΄ΠΎ Go 1.22): Π’ вСрсиях Go Π΄ΠΎ 1.22 сущСствовала извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° Π² замыканиях (функциях, создаваСмых Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠ°ΠΊ наша анонимная Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ i Π±Ρ‹Π»Π° ΠΎΠ΄Π½Π° Π½Π° вСсь Ρ†ΠΈΠΊΠ».

Когда Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ (послС нСбольшой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ time.Sleep), Ρ†ΠΈΠΊΠ» for, скорСС всСго, ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ пСрСмСнная i ΠΈΠΌΠ΅Π»Π° Π±Ρ‹ своС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 3, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° i становится Ρ€Π°Π²Π½Ρ‹ΠΌ count).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² старых вСрсиях Go этот ΠΊΠΎΠ΄, скорСС всСго, Π²Ρ‹Π²Π΅Π» Π±Ρ‹:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3

ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.

(ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: i := i Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄ запуском Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

НовоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Go 1.22 ΠΈ Π½ΠΎΠ²Π΅Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 1.24): Начиная с Go 1.22, сСмантика ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° for Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° для прСдотвращСния этой распространСнной ошибки. Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° (i Π² нашСм случаС) пСрСсоздаСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию i, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (Go 1.24): Благодаря измСнСнию Π² Go 1.22, каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΈΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Ρ‚ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ (порядок строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ планирования Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½):
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.
Use code with caution.
Или, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.


ΠŸΠΎΠ΄Π²ΠΎΡ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ выглядит ΠΊΠ°ΠΊ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ошибки Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² языкС начиная с Go 1.22, ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ" Π±Π΅Π· нСобходимости явного копирования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (i := i).
Please open Telegram to view this post
VIEW IN TELEGRAM



tg-me.com/golangtests/764
Create:
Last Update:

πŸ‘£ Π—Π°Π΄Π°Ρ‡Π° с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связан с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ повСдСния Ρ†ΠΈΠΊΠ»ΠΎΠ², Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² Go 1.22 (ΠΈ, соотвСтствСнно, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ для Go 1.24).

Π—Π°Π΄Π°Ρ‡Π°: Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ компиляции ΠΈ запускС с использованиСм Go 1.24?


package main

import (
"fmt"
"sync"
"time"
)

func main() {
var wg sync.WaitGroup
count := 3

fmt.Println("Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Add(count)

for i := 0; i < count; i++ {
// ЗапускаСм Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
go func() {
defer wg.Done()
// Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ
time.Sleep(time.Duration(10) * time.Millisecond)
// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π° 'i' Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹
fmt.Printf("Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = %d\n", i)
}()
}

fmt.Println("ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Wait()
fmt.Println("ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.")
}



Π Π°Π·Π±ΠΎΡ€:
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (Π΄ΠΎ Go 1.22): Π’ вСрсиях Go Π΄ΠΎ 1.22 сущСствовала извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° Π² замыканиях (функциях, создаваСмых Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠ°ΠΊ наша анонимная Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ i Π±Ρ‹Π»Π° ΠΎΠ΄Π½Π° Π½Π° вСсь Ρ†ΠΈΠΊΠ».

Когда Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ (послС нСбольшой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ time.Sleep), Ρ†ΠΈΠΊΠ» for, скорСС всСго, ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ пСрСмСнная i ΠΈΠΌΠ΅Π»Π° Π±Ρ‹ своС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 3, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° i становится Ρ€Π°Π²Π½Ρ‹ΠΌ count).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² старых вСрсиях Go этот ΠΊΠΎΠ΄, скорСС всСго, Π²Ρ‹Π²Π΅Π» Π±Ρ‹:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3

ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.

(ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: i := i Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄ запуском Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

НовоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Go 1.22 ΠΈ Π½ΠΎΠ²Π΅Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 1.24): Начиная с Go 1.22, сСмантика ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° for Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° для прСдотвращСния этой распространСнной ошибки. Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° (i Π² нашСм случаС) пСрСсоздаСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию i, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (Go 1.24): Благодаря измСнСнию Π² Go 1.22, каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΈΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Ρ‚ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ (порядок строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ планирования Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½):
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.
Use code with caution.
Или, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.


ΠŸΠΎΠ΄Π²ΠΎΡ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ выглядит ΠΊΠ°ΠΊ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ошибки Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² языкС начиная с Go 1.22, ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ" Π±Π΅Π· нСобходимости явного копирования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (i := i).

BY Go tests


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/golangtests/764

View MORE
Open in Telegram


Go tests Telegram | DID YOU KNOW?

Date: |

Export WhatsApp stickers to Telegram on iPhone

You can’t. What you can do, though, is use WhatsApp’s and Telegram’s web platforms to transfer stickers. It’s easy, but might take a while.Open WhatsApp in your browser, find a sticker you like in a chat, and right-click on it to save it as an image. The file won’t be a picture, thoughβ€”it’s a webpage and will have a .webp extension. Don’t be scared, this is the way. Repeat this step to save as many stickers as you want.Then, open Telegram in your browser and go into your Saved messages chat. Just as you’d share a file with a friend, click the Share file button on the bottom left of the chat window (it looks like a dog-eared paper), and select the .webp files you downloaded. Click Open and you’ll see your stickers in your Saved messages chat. This is now your sticker depository. To use them, forward them as you would a message from one chat to the other: by clicking or long-pressing on the sticker, and then choosing Forward.

To pay the bills, Mr. Durov is issuing investors $1 billion to $1.5 billion of company debt, with the promise of discounted equity if the company eventually goes public, the people briefed on the plans said. He has also announced plans to start selling ads in public Telegram channels as soon as later this year, as well as offering other premium services for businesses and users.

Go tests from sa


Telegram Go tests
FROM USA